package tralala.jdo; 

import java.util.List;

import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManager;
import javax.jdo.PersistenceManagerFactory;
import javax.jdo.Transaction;
import javax.jdo.Query;

import tralala.data.*;


public class UsuarioDAO {
	
	private PersistenceManager pm = null;
	private PersistenceManagerFactory pmf=null;
	private static UsuarioDAO cd= new UsuarioDAO();
	
	private UsuarioDAO(){
		System.out.println("Constructor CancionDAO");
		pmf = JDOHelper.getPersistenceManagerFactory("datanucleus.properties");
		pm=pmf.getPersistenceManager();
	}
	
	public static UsuarioDAO getInstance(){
		return cd;
	}
	
	public void almacenar(Usuario us){
		Transaction tx = pm.currentTransaction();
		try{
			tx.begin();
			pm.makePersistent(us);
			tx.commit();
		} catch (Exception e) {
			tx.rollback();
			tx.begin();
			Query query = pm.newQuery("SELECT FROM " + Usuario.class.getName() + " WHERE usuario == '" + us.getNombre_usuario() + "'");
			query.setUnique(true);
			Usuario temp = (Usuario)query.execute();
			temp.setNombre_usuario(us.getNombre_usuario());
			temp.setEmail(us.getEmail());
			temp.setContrasena(us.getContrasena());
			temp.setDni(us.getDni());
			tx.commit();
		} finally {
		    if (tx.isActive())
		    {
		        tx.rollback();
		    }
		}
	}
	
	public void eliminar(Usuario m){
		Transaction tx = pm.currentTransaction();
		tx.begin();
		pm.deletePersistent(m);
		tx.commit();
	}
	
	public Usuario get(String username, String password){
		System.out.println("EMPIEZA CONSULTA USUARIO");
		Transaction tx = pm.currentTransaction();
		Usuario tempMem = null;
		try{
		tx.begin();
		Query query = pm.newQuery("SELECT FROM " + Usuario.class.getName() + " WHERE nombre_usuario == '" + username + "'");
		query.setUnique(true);
		tempMem = (Usuario)query.execute();
		System.out.println("Usuario obtenido: "+tempMem);
		tx.commit();
		}catch(Exception ex)
		{
			System.out.println("EXCEPCION AL OBTENER UN USUARIO: \n"+ ex.getMessage());
			
		}
		System.out.println("ACABO CONSULTA USUARIO");
		return tempMem;
	}
	
	public List<Usuario> getUsuarios(){
		Transaction tx = pm.currentTransaction();
		tx.begin();
		Query query = pm.newQuery("SELECT FROM " + Usuario.class.getName());
		@SuppressWarnings("unchecked")
		List<Usuario> listMembers = (List<Usuario>) query.execute();
		tx.commit();
		
		return listMembers;
	}
}
